/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.wooxes.client;

import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FormHandler;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.Window;

/**
 *
 * @author alladanosa
 */
public class Linia extends Composite {

    int linia;
    String codi;
    String comentari;
    boolean open = false;
    
    FormHandler handler;
    
    public Linia (final String ruta_completa, int i, final Comment c, FormHandler f){
        setLinia(i);
        setCodi(c.getCodi());
        setComentari(c.getHTML());
        handler = f;
        
        VerticalPanel panel = new VerticalPanel();
        panel.setWidth("100%");
        
        HorizontalPanel dalt = new HorizontalPanel();
        dalt.setStyleName("Linia-Dalt");
        
        //Dalt
        HTML num = new HTML(Integer.toString(linia));
        num.setStyleName("Linia-Num");
        
        //Baix
        final SimplePanel baix = new SimplePanel();
        baix.setStyleName("Linia-Baix");
        baix.setVisible(false);

        num.addClickListener(new ClickListener(){
            public void onClick(Widget w){
                /*if(baix.isVisible() && isOpen()){
                        setOpen(false);
                        baix.setVisible(false);
                        baix.setWidget(null);
                }*/
                if(baix.isVisible()){
                        baix.setVisible(false);
                        baix.setWidget(null);
                }
                else{
                    // Si es vol insertar comentari, es creen els diferents apartats
                    // com el formulari i l'àrea de text.
                    // Es crea dinàmicament per estalviar memòria.
                    //
                    // Panel del formulari
                    final FormPanel form = new FormPanel();
                    form.setAction("comentari_servlet");
                    form.setMethod(FormPanel.METHOD_POST);
                    form.setEncoding(FormPanel.ENCODING_URLENCODED);

                    //Contingut i parts del formulari
                    //Area de text
                    final RichTextArea area = new RichTextArea();
                    //area.setText(this.comentari);
                    area.setHTML(comentari);
                    area.setWidth("100%");
                    
                    //Ocults: Arxiu, Linia, Comentari
                    final Hidden h_accio = new Hidden("accio", "afegir");
                    Hidden h_arxiu = new Hidden("arxiu", ruta_completa);
                    Hidden h_linia = new Hidden("linia", Integer.toString(linia));
                    //Hidden h_tipus = new Hidden("tipus", "Positiu");
                    final Hidden h_comentari = new Hidden("comentari");
                    
                    //Barra
                    RichTextToolbar tb = new RichTextToolbar(area);
                    
                    //Llista
                    final ListBox llista_tipus = new ListBox();
                    llista_tipus.setName("tipus");
                    llista_tipus.addItem("Tipus");
                    llista_tipus.addItem("Positiu");
                    llista_tipus.addItem("Neutral");
                    llista_tipus.addItem("Negatiu");
                    
                    HorizontalPanel hpLlista_tipus = new HorizontalPanel();
                    hpLlista_tipus.setWidth("100%");
                    hpLlista_tipus.add(llista_tipus);
                    hpLlista_tipus.addStyleName("Linia-Comentari-Tipus");
                    
                    if(comentat()){
                        if( c.getTipus().equalsIgnoreCase("Positiu")){
                            llista_tipus.setSelectedIndex(1);
                        }
                        else if( c.getTipus().equalsIgnoreCase("Neutral")){
                            llista_tipus.setSelectedIndex(2);
                        }
                        else if( c.getTipus().equalsIgnoreCase("Negatiu")){
                            llista_tipus.setSelectedIndex(3);
                        }
                    }
                    
                    //Botó enviar
                    Button enviar = new Button("Enviar");
                    enviar.addClickListener(new ClickListener(){
                        public void onClick(Widget sender){
                            if(area.getText().equals("")){
                                Window.alert("No es pot enviar un comentari buit");
                            }
                            else if( llista_tipus.getSelectedIndex() == 0){
                                Window.alert("Selecciona tipus de comentari");
                            }
                            else{
                                h_accio.setValue("afegir");
                                h_comentari.setValue(area.getHTML());
                                form.submit();
                            }
                        }
                    });
                    Button restaurar = new Button("Restaurar");
                    restaurar.addClickListener(new ClickListener(){
                        public void onClick(Widget sender){
                            area.setHTML(comentari);
                        }
                    });

                    Button eliminar = new Button("Eliminar");
                    eliminar.addClickListener(new ClickListener(){
                        public void onClick(Widget sender){
                            h_accio.setValue("eliminar");
                            form.submit();
                        }
                    });
                    HorizontalPanel hp = new HorizontalPanel();
                    hp.add(enviar);
                    hp.add(restaurar);
                    hp.add(eliminar);

                    VerticalPanel comentariArea = new VerticalPanel();
                    comentariArea.setStyleName("Linia-ComentariArea");
                    comentariArea.add(tb);
                    comentariArea.add(hpLlista_tipus);
                    comentariArea.add(area);
                    comentariArea.add(hp);
                    comentariArea.add(h_accio);
                    comentariArea.add(h_arxiu);
                    comentariArea.add(h_linia);
                    //comentariArea.add(h_tipus);
                    comentariArea.add(h_comentari);
                    
                    form.addFormHandler(handler);

                    form.setWidget(comentariArea);
                    baix.setWidget(form);
                    setOpen(true);
                    baix.setVisible(true);
                }
            }
        });
        
        //HTMLspan codi = new HTMLspan("<pre>"+this.codi+"</pre>");
        HTMLpre codipre = new HTMLpre();
        codipre.setText(getCodi());
        codipre.setStylePrimaryName("Linia-Codi");
        dalt.add(num);
        dalt.setCellWidth(num, "40px");
        dalt.add(codipre);
        
        
        panel.add(dalt);
        if(comentat()){
            num.addStyleDependentName("Comentat");
            
            HorizontalPanel mig = new HorizontalPanel();
            mig.setWidth("80%");
            Image color = new Image();
            
            HTML comment = new HTML(getComentari());
            comment.setStylePrimaryName("Linia-Comentari");
            
            if( c.getTipus().equalsIgnoreCase("Positiu")){
                color.setUrl("images/comentari_positiu.jpg");
                comment.addStyleDependentName("Positiu");
            }
            else if( c.getTipus().equalsIgnoreCase("Neutral")){
                color.setUrl("images/comentari_neutral.jpg");
                comment.addStyleDependentName("Neutral");
            }
            //else if( c.getTipus().equalsIgnoreCase("Negatiu")){
            else{
                color.setUrl("images/comentari_negatiu.jpg");
                comment.addStyleDependentName("Negatiu");
            }
            
            mig.add(color);
            mig.setCellWidth(color, "40px");
            mig.setCellHorizontalAlignment(color, HorizontalPanel.ALIGN_RIGHT);
            mig.setCellVerticalAlignment(color, HorizontalPanel.ALIGN_MIDDLE);
            mig.add(comment);

            panel.add(mig);
        }

        panel.add(baix);
        
        initWidget(panel);
    }
    
    int getLinia(){
        return linia;
    }
    
    String getCodi(){
        return codi;
    }
    
    String getComentari(){
        return comentari;
    }
    
    void setLinia(int i){
        linia = i;
    }
    
    void setCodi(String s){
        codi = s;
    }
    
    void setComentari(String s){
        comentari = s;
    }
    
    boolean comentat(){
        if(comentari == null || comentari.equals("")){
            return false;
        }
        else{
            return true;
        }
    }
    
    boolean isOpen(){
        return open;
    }
    
    void setOpen(boolean bool){
        open = bool;
    }
}
